
    
    

        Map.implement
        ({
            data: null
            
        ,   put: function (key, value) 
            {
                this.data[key]= value
            }
            
        ,   has: function (key) 
            {
                return key in this.data;
            }
            
        ,   get: function (key) 
            {
                if (this.has(key))
                    return this.data[key];
                    
                throw new RangeError ('UndefinedKey');
            }
            
        ,   contains: function (value) 
            {
                for (var accessor in this.data) 
                {
                    if (value === this.data[accessor])
                        return true;
                }
                
                return false;
            }
         
        ,   remove: function (key) 
            {
                delete this.data[key];
            }
            
        ,   isEmpty: function () 
            {
                for (var accessor in this.data)
                    return false;
                    
                return true;
            }
            
        ,   clear: function () 
            {
                this.data= {};
            }
        });
        
        function Map () 
        {
            this.clear();
        };


        NumberFilter.implement
        (
            function accept (value) 
            {
                return !isNaN(value);
            }
        );
        
        function NumberFilter () {;};
        
        NumberMap.inherits(Map);
        NumberMap.implement
        (
            NumberFilter.prototype
        
        ,   function put (key, value) 
            {
                if (this.accept(value))
                    this.parent.put.call(key, value);
            }    
        );
        
        function NumberMap ()
        {
            Map.call(this);
        };
        

        
        
    
    